Обикновени диференциални уравнения и системи
с функциите DSolve, NDSolve и визуализиране на резултата с Plot[Evaluate[ ]]

Пример 1. Решаваме линейното диференциално уравнение от първи ред  y' = - x y  относно x. Получаваме формула на общото решение, зависещо от една произволна константа C[1]. Във втория ред запомняме решението в клетката  u чрез извличане от списък с операцията  [[ ]].


DSolve[y'[x]== -x*y[x], y[x],x]
u=y[x] /.%[[1]]

{{y[x] ^(-x^2/2) C[1]}}

^(-x^2/2) C[1]

Пример 2. Намираме частно решение като заместим константата с конкретна стойност и визуализираме резултатачрез функцията Plot, тъй като той е в аналитичен вид (формула).

w=u /.C[1]->1
g1=Plot[w,{x,-5,5}]

^(-x^2/2)

[Graphics:HTMLFiles/index_4.gif]

⁃Graphics⁃

Пример 3. Уравнението от Пример 1 става задача на Коши (начална задача), ако зададем условие за стойност на търсената функция  y  в определена точка, нека например при  x=0, y=-2. Изобразяваме решението в подходящ интервал.

DSolve[ {y'[x]== -x*y[x],y[0]==-2}, y[x],x]
u1=y[x] /.%[[1]]
Plot[u1,{x,0,5}]

{{y[x]  -2 ^(-x^2/2)}}

-2 ^(-x^2/2)

[Graphics:HTMLFiles/index_8.gif]

⁃Graphics⁃

Пример 4. Същата начална задача от Пример 3 можем да решим и числено чрез функцията NDSolve. Всъщност тази функция се използва предимно когато не съществува аналитично представяне на решението във вид на формула или пък формулата е много сложна. С нея се решават почти всички начални задачи. Но резултатът е във вид на набор от числа, които Mathematica интерполира при необходимост.
    В първия ред решаваме приближено задачата в определен интервал, във втория ред извличаме стойност на търсената функция  y  в точката x=1.5, а в третия отпечатваме точната стойност, която се изчислява от намерената преди формула. Има разлика в седмия десетичен знак.

NDSolve[ {y'[x]==-x* y[x],y[0]==-2}, y,{x,0,2}]
y[1.5] /.%
u1 /. x->1.5

RowBox[{{, RowBox[{{, RowBox[{y, , TagBox[RowBox[{InterpolatingFunction, [, RowBox[{Ro ... owBox[{{, RowBox[{0., ,, 2.}], }}], }}], ,, <>}], ]}], False, Editable -> False]}], }}], }}]

RowBox[{{, RowBox[{-, 0.649305}], }}]

RowBox[{RowBox[{{, RowBox[{-, 0.649305}], }}], }]

RowBox[{-, 0.649305}]

RowBox[{RowBox[{-, 0.649305}], }]

Пример 5. Тук показваме как се визуализира графиката на решението и изчисляваме стойността  y  на в точката  x=0.5.

NDSolve[ {y'[x]== y[x],y[0]==-2}, y,{x,0,2}]
Plot[ Evaluate[y[x]/.%],{x,0,2}]
y[0.5] /.%%

RowBox[{{, RowBox[{{, RowBox[{y, , TagBox[RowBox[{InterpolatingFunction, [, RowBox[{Ro ... owBox[{{, RowBox[{0., ,, 2.}], }}], }}], ,, <>}], ]}], False, Editable -> False]}], }}], }}]

[Graphics:HTMLFiles/index_16.gif]

⁃Graphics⁃

RowBox[{{, RowBox[{-, 3.29745}], }}]

Пример 7. Тук решаваме начална чадача за система от две обикноивени диференциални уравнения и показваме графиките на получените решения.

u1= y'[x]== z[x]
u2= z'[x] == -y[x]
u10= y[0]==0
u20= z[0]==1
NDSolve[{u1,u2,u10,u20}, {y ,z }, {x,0,Pi}]
g1=Plot[ Evaluate[y[x] /.%], {x,0,Pi}]
g2=Plot[ Evaluate[z[x] /.%%], {x,0,Pi}]

y^′[x] == z[x]

z^′[x] == -y[x]

y[0] == 0

z[0] == 1

RowBox[{{, RowBox[{{, RowBox[{RowBox[{y, , TagBox[RowBox[{InterpolatingFunction, [, Ro ... {, RowBox[{0., ,, 3.14159}], }}], }}], ,, <>}], ]}], False, Editable -> False]}]}], }}], }}]

[Graphics:HTMLFiles/index_24.gif]

⁃Graphics⁃

[Graphics:HTMLFiles/index_26.gif]

⁃Graphics⁃

Пример 8. Едновременно визуализиране на двете графики.

Show[g1,g2]

[Graphics:HTMLFiles/index_28.gif]

⁃Graphics⁃


Created by Mathematica  (May 21, 2008)